﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace projetoFinal.pages.administracao.usuarios
{
    public partial class listagem : baseWebPage
    {
        protected void Page_Init(object sender, EventArgs e)
        {
            base.Modulo = operaModulo.buscar("ADMINISTRAÇÃO - USUÁRIO");
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                //Arruma o diretório das imagens
                menuTopo.setDiretorio("../");
                menuEsquerda.setDiretorio("../");

                //Esconde as mensagens
                this.positive.Visible = false;
                this.negative.Visible = false;
                this.information.Visible = false;

                int msg = 0;
                if (Request["msg"] != null)
                {
                    msg = int.Parse(Request["msg"].ToString());
                    switch (msg)
                    {
                        case 1:
                            message("Sucesso!", "Edição realizada com sucesso.", true);
                            break;
                        case 2:
                            message("Falha!", "Não foi possível realizar a edição", false);
                            break;
                        case 3:
                            message("Sucesso!", "Inclusão realizada com sucesso.", true);
                            break;
                        case 4:
                            message("Falha!", "Não foi possível realizar a inclusão", false);
                            break;
                    }
                }

                bind();
                bindNivelAcesso();
            }
        }
        /// <summary>
        /// Exibe as mensagens das ações efetuadas
        /// </summary>
        /// <param name="title">Titulo da mensagem</param>
        /// <param name="mensagem">Conteúdo da mensagem</param>
        /// <param name="positive">Muda o layout de acordo com a mensagem</param>
        private void message(string title, string mensagem, bool positive)
        {
            if (positive)
            {
                this.negative.Visible = false;
                this.positive.Visible = true;
                this.lblTitlePositive.Text = title;
                this.lblMessagePositive.Text = mensagem;
            }
            else
            {
                this.positive.Visible = false;
                this.negative.Visible = true;
                this.lblTitleNegative.Text = title;
                this.lblMessageNegative.Text = mensagem;
            }
        }
        private void bind()
        {
            List<projetoFinal.usuario> lstUsuario = operaUsuario.listar("", "", 0);
            if (lstUsuario.Count > 0)
            {
                tblListagem.Visible = true;
                tblListagem.DataSource = lstUsuario;
                tblListagem.DataBind();

                this.information.Visible = false;
            }
            else
            {
                tblListagem.Visible = false;
                this.information.Visible = true;
                this.lblTitleInformation.Text = "Aviso!";
                this.lblMessageInformation.Text = "Nenhum registro para ser mostrado";
            }
        }
        private void bind(string field, string value)
        {
            List<projetoFinal.usuario> lstUsuario = operaUsuario.listar(field, value, 0);
            if (lstUsuario.Count > 0)
            {
                tblListagem.Visible = true;
                tblListagem.DataSource = lstUsuario;
                tblListagem.DataBind();

                this.information.Visible = false;
            }
            else
            {
                tblListagem.Visible = false;
                this.information.Visible = true;
                this.lblTitleInformation.Text = "Aviso!";
                this.lblMessageInformation.Text = "Nenhum registro para ser mostrado";
            }
        }
        protected void tblListagem_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
            {
                HtmlInputCheckBox chkListagem = (HtmlInputCheckBox)e.Item.FindControl("chkListagem");
                HtmlAnchor lnkEdicao = (HtmlAnchor)e.Item.FindControl("lnkEdicao");
                Literal lblCodigo = (Literal)e.Item.FindControl("lblCodigo");
                Literal lblNome = (Literal)e.Item.FindControl("lblNome");
                Literal lblNivelAcesso = (Literal)e.Item.FindControl("lblNivelAcesso");
                Literal lblStatus = (Literal)e.Item.FindControl("lblStatus");

                projetoFinal.usuario o = (projetoFinal.usuario)e.Item.DataItem;

                if ((chkListagem != null) && (lnkEdicao != null) && (lblCodigo != null) && (lblNome != null) && (lblNivelAcesso != null) && (lblStatus != null))
                {
                    chkListagem.Value = o.CodUsuario.ToString();
                    lnkEdicao.HRef = "dados.aspx?id=" + o.CodUsuario.ToString();
                    lblCodigo.Text = o.CodUsuario.ToString();
                    lblNome.Text = o.Nome.ToString();
                    lblNivelAcesso.Text = o.NivelAcesso.Descr;
                    lblStatus.Text = o.Status.ToString();
                }
            }
            if (e.Item.ItemType == ListItemType.Footer)
            {
                ImageButton imgDeletar = (ImageButton)e.Item.FindControl("imgDeletar");
                if (imgDeletar != null)
                {
                    if (base.CanDelete)
                    {
                        imgDeletar.Attributes.Add("onclick", "javascript:return apagar();");
                    }
                    else
                    {
                        imgDeletar.Attributes.Add("onclick", "javascript:alert('Você não tem permissão para apagar registros!'); return false;");
                    }
                }
            }
        }

        protected void tblListagem_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName == "deletar")
            {
                foreach (DataListItem tblItem in tblListagem.Items)
                {
                    HtmlInputCheckBox chkListagem = (HtmlInputCheckBox)tblItem.FindControl("chkListagem");
                    if (chkListagem != null)
                    {
                        if (chkListagem.Checked)
                        {
                            //Apaga o registro
                            operaUsuario.apagar(Int64.Parse(chkListagem.Value));
                        }
                    }
                }
                message("Sucesso!", "Registros apagados.", true);
                bind();
            }
        }
        private void bindNivelAcesso()
        {
            selNivelAcesso.DataSource = operaNivelAcesso.listar("", "", 0);
            selNivelAcesso.DataTextField = "Descr";
            selNivelAcesso.DataValueField = "CodNivelAcesso";
            selNivelAcesso.DataBind();

            selNivelAcesso.Items.Insert(0, new ListItem("Selecione...", ""));
        }
        protected void btnFiltro_Click(object sender, EventArgs e)
        {
            string field = "1 = 1";
            string value = string.Empty;

            if (txtCodigo.Value.Trim().Length > 0)
            {
                Int64 codigo = 0;
                Int64.TryParse(txtCodigo.Value, out codigo);
                if (codigo != 0)
                {
                    field += " AND codUsuario = " + txtCodigo.Value;
                }
                else
                {
                    txtCodigo.Value = "";
                }
            }
            if (txtNome.Value.Trim().Length > 0)
            {
                field += " AND nome like '" + txtNome.Value + "%' ";
            }
            if (selNivelAcesso.SelectedIndex != 0)
            {
                field += " AND codNivelAcesso = '" + selNivelAcesso.Items[selNivelAcesso.SelectedIndex].Value + "' ";
            }
            if ((radStatusAtivo.Checked) || (radStatusInativo.Checked))
            {
                status s = radStatusAtivo.Checked ? status.ativo : status.inativo;
                field += " AND status = '" + (Int32)s + "' ";
            }

            field += " AND 1 ";
            value = " 1 ";

            bind(field, value);
        }
    }
}
